from tkinter import END, BOTH, YES
from tkinter.scrolledtext import ScrolledText


#帮助界面
class Help:
    def __init__(self, win):
        self.win = win
        pass

    def initHelp(self):
        scr = ScrolledText(self.win, height=600, font=("隶书", 12),bd =2)
        scr.pack(side="top", fill=BOTH, padx=5, pady=5,  expand=YES, ipadx =2, ipady = 2)

        text = (
            "一、Monkey测试原理：\n\nMonkey是Android中的一个命令行工具，可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等)，实现对正在开发的应用程序进行压力测试。Monkey测试是一种为了测试软件的稳定性、健壮性的快速有效的方法。\n"
            "\n二、测试准备\n\n"
            "1、首先需要将手机连接到PC，测试连接是否正常，可在cmd里输入adb devices来进行验证；\n"
            "2、因测试多针对一个特定的APP包，所以需要知道需要测试包的包名；可以直接问开发，也可以通过 adb shell pm list packages  列出所有包名来进行查找\n"
            "(不确定包是否已安装，可以用adb shell pm list packages [options] <INTENT> 来进行确认，它的含义是列举出所有包含<INTENT>的package。    e.g. adb shell pm list packages com.taobao.taobao)\n"
            "3、对特定APP包进行测试的命令为adb shell monkey -p <pakage.name>\n"
            "\n三、Monkey参数\n\n"
            "常规类参数\n\n"
            "1、 -help\n"
            "作用：列出简单的用法\n"
            "例：adb shell monkey -help   也可不写help\n"
            "2、-v\n"
            "作用：命令行上的每一个-v都将增加反馈信息的详细级别。\n"
            "Level0（默认），除了启动、测试完成和最终结果外只提供较少的信息。\n"
            "Level1，提供了较为详细的测试信息，如逐个发送到Activity的事件信息。\n"
            "Level2，提供了更多的设置信息，如测试中选中或未选中的Activity信息。\n"
            "比较常用的是-v -v -v，即最多详细信息，一般会保存到指定文件中供开发人员查找bug原因时使用。\n"
            "例：adb shell monkey -v 10\n"
            "\n事件类参数\n\n"
            "1、-s <seed>\n"
            "作用：伪随机数生成器的seed值。如果用相同的seed值再次运行monkey，将生成相同的事件序列。\n"
            "例：adb shell monkey -s 1483082208904 -v 10\n"
            "2、–throttle <milliseconds>\n"
            "作用：在事件之间插入固定的时间（毫秒）延迟，你可以使用这个设置来减缓Monkey的运行速度，如果你不指定这个参数，则事件之间将没有延迟，事件将以最快的速度生成。\n"
            "注：常用参数，一般设置为300毫秒，原因是实际用户操作的最快300毫秒左右一个动作事件，所以此处一般设置为300毫秒。\n"
            "例：adb shell monkey –throttle 300 -v 10\n"
            "3、–pct-touch <percent>\n"
            "作用：调整触摸事件的百分比。（触摸事件是指在屏幕中的一个down-up事件，即在屏幕某处按下并抬起的操作）\n"
            "注：常用参数，此参数设置要适应当前被测应用程序的操作，比如一个应用80%的操作都是触摸，那就可以将此参数的百分比设置成相应较高的百分比。\n"
            "例：adb shell monkey –pct-touch 100 -v 10\n"
            "4、–pct-motion <percent>\n"
            "作用：调整motion事件百分比。（motion事件是由屏幕上某处一个down事件、一系列伪随机的移动事件和一个up事件组成）\n"
            "注：常用参数，需注意的是移动事件是直线滑动\n"
            "例：adb shell monkey –pct-motion 100 -v 10\n"
            "5、–pct-trackball <percent>\n"
            "作用：调整滚动球事件百分比。（滚动球事件由一个或多个随机的移动事件组成，有时会伴随着点击事件）\n"
            "注：不常使用参数，现在手机几乎没有滚动球，但滚动球事件中包含曲线滑动事件，在被测程序需要曲线滑动时可以选用此参数。\n"
            "例：adb shell monkey –pct-trackball 100 -v 10\n"
            "6、–pct-nav <percent>\n"
            "作用：调整基本的导航事件百分比。（导航事件由方向输入设备的上下左右按键所触发的事件组成）\n"
            "注：不常用操作。\n"
            "例：adb shell monkey –pct-nav 100 -v 10\n"
            "7、–pct-majornav <percent>\n"
            "作用：调整主要导航事件的百分比。（这些导航事件通常会导致UI界面中的动作事件，如5-way键盘的中间键，回退按键、菜单按键）\n"
            "注：不常用操作。\n"
            "例：adb shell monkey –pct-majornav 100 -v 10\n"
            "8、–pct-syskeys <percent>\n"
            "作用：调整系统事件百分比。（这些按键通常由系统保留使用，如Home、Back、Start Call、End Call、音量调节）\n"
            "注：不常用。\n"
            "例：adb shell monkey –pct-syskeys 100 -v 10\n"
            "9、–pct-appswitch <percent>\n"
            "作用：调整Activity启动的百分比。（在随机的时间间隔中，Monkey将执行一个startActivity()调用，作为最大程度覆盖被测包中全部Activity的一种方法）\n"
            "注：不常用。\n"
            "例：adb shell monkey –pct-appswitch 100 -v 5\n"
            "10、–pct-anyevent\n"
            "作用：调整其他事件的百分比。（这包含所有其他事件，如按键、其他在设备上不常用的按钮等）\n"
            "注：不常用。\n"
            "例：adb shell monkey –pct-anyevent 100 -v 5\n"
            "\n约束类参数\n\n"
            "1、-p <allowed-package-name>\n"
            "作用：如果你指定一个或多个包，Monkey将只允许访问这些包中的Activity。如果你的应用程序需要访问这些包(如选择联系人)以外的Activity，你需要指定这些包。如果你不指定任何包，Monkey将允许系统启动所有包的Activity。指定多个包，使用多个-p，一个-p后面接一个包名。\n"
            "注：常用参数。(在前面测试准备中已有提及)\n"
            "例：adb shell monkey -p com.Android.browser -v 10\n"
            "2、-c <main-category>\n"
            "作用：如果你指定一个或多个类别，Monkey将只允许系统启动这些指定类别中列出的Activity。如果你不指定任何类别，Monkey将选择谢列类别中列出的Activity，Intent.CATEGORY_LAUNCHER和Intent.CATEGORY_MONKEY。指定多个类别使用多个-c，每个-c指定一个类别。\n"
            "注：不常用。\n"
            "3、–dbg-no-events\n"
            "作用：设置此选项，Monkey将执行初始启动，进入一个测试Activity，并不会在进一步生成事件。为了得到最佳结果，结合参数-v，一个或多个包的约束，以及一个保持Monkey运行30秒或更长时间的非零值，从而提供了一个可以监视应用程序所调用的包之间转换的环境。\n"
            "注：不常用。\n"
            "4、–hprof\n"
            "作用：设置此选项，将在Monkey生成事件序列前后生成profilling报告。在data/misc路径下生成大文件（~5Mb），所以要小心使用。\n"
            "注：不常用。\n"
            "5、–ignore-crashes\n"
            "作用：通常，应用发生崩溃或异常时Monkey会停止运行。如果设置此项，Monkey将继续发送事件给系统，直到事件计数完成。\n"
            "注：常用。\n"
            "6、–ignore-timeouts\n"
            "作用：通常，应用程序发生任何超时错误（如“Application Not responding”对话框）Monkey将停止运行，设置此项，Monkey将继续发送事件给系统，直到事件计数完成。\n"
            "注：常用。\n"
            "7、–ignore-security-exception \n"
            "作用：通常，当程序发生许可错误（例如启动一些需要许可的Activity）导致的异常时，Monkey将停止运行。设置此项，Monkey将继续发送事件给系统，直到事件计数完成。\n"
            "注：常用。\n"
            "8、–kill-process-after-error\n"
            "作用：通常，当Monkey由于一个错误而停止时，出错的应用程序将继续处于运行状态。设置此项，将会通知系统停止发生错误的进程。注意，正常（成功）的结束，并没有停止启动的进程，设备只是在结束事件之后简单的保持在最后的状态。\n"
            "9、–monitor-native-crashes\n"
            "作用：监视并报告Andorid系统中本地代码的崩溃事件。如果设置–kill-process-after-error，系统将停止运行。\n"
            "10、–wait-dbg\n"
            "作用：停止执行中的Monkey，直到有调试器和它相连接。");
        scr.insert(END, text)
